#ifndef ANIMATION_H
    #define ANIMATION_H

#include <SDL/SDL.h>

/**
 * En una animacion, tenemos los siguientes frames de control.
 *
 * 0   i    k   p       n
 * |---*----|---|-------|
 *
 * i es el frame actual. De 0 a k, tenemos el principio de la animacion:
 * frames que solo se ejecutan cuado comienza la animacion.
 *
 * De k hasta p, tenemos los "loop frames", y es este rango de frames donde la
 * animacion cicla.
 *
 * De p hasta n tenemos los frames finales, que se ejecutan cuando la animacion
 * esta terminando.
 *
 * Al momento de crear una animacion, se debe indicar cuales son estos frames
 * de control.
 */
class Animation {
	protected:
        /** Frame actual */
		int	    currentFrame;

        /** Numero maximo de frames en el scripte */
        int	    MaxFrames;

        /** Frames de control */
        int     k;
        int     p;

        /** Estado de la animacion */
        enum {CA_LOOP = 0, CA_ENDING, CA_STOP} status;

        /** Dimensiones del frame */
        int width, height;

        /** Velocidad entre frames de la animacion */
        int     FrameRate;      //Milliseconds
		long    OldTime;

	public:
		Animation();

        /**
         * Calcula cuantos frames hay que mover, en base al tiempo transcurrido
         *
         * @param time
         */
		void OnAnimate();

        void SetFrameRate(int Rate);

		void SetCurrentFrame(int Frame);

		int GetCurrentFrame();

        /** Inicia la animacion */
        void startAnimation(int=0, int=0);

        /** Finaliza la animacion */
        void finishAnimation();

        /** Obtiene el frame asociado a la animacion */
        virtual SDL_Surface* getFrame() =0;

        /** Obtiene las coordenadas del frame */
        virtual int getX();
        virtual int getY();
        int getWidth();
        int getHeight();
};

#endif
